草庐IT

C++ 泛型 vector

全部标签

c# - 基于泛型约束的方法重载?

我能否以某种方式拥有仅因泛型类型约束而不同的重载方法?这不编译:voidFoo(Tbar)whereT:class{}voidFoo(Tbar)whereT:struct{}由于这些是“开放”方法,当在代码中使用具体类型的T引用实际方法时,实际方法应该是封闭的/构造的/完全定义的,然后就会清楚是哪个过载调用。显而易见的解决方案是不要重载它们,但我想知道为什么这在C#中不起作用?附加问题:如果这只是一个C#编译器约束,IL是否允许这样的重载? 最佳答案 CanIsomehowhaveoverloadedmethodswhichdiff

c# - 限制方法中泛型类型的目的是什么?

我很难理解为什么这样做会有益:(示例是一个类)staticvoidPrintResults(Tresult)whereT:Sample将Sample传递给方法不是更好吗?staticvoidPrintResults(Sampleresult) 最佳答案 我建议避免使用非泛型语法的泛型类型,例如您给出的示例。但是,还有其他有用的案例。例如,一般指定返回类型:staticTCreate()whereT:Sample,new(){returnnewT();}//CallingcodeSamplesample=Create();代替stat

c# - 我可以将类型对象传递给泛型方法吗?

这个问题在这里已经有了答案:HowdoIusereflectiontocallagenericmethod?(8个答案)关闭8年前。我的DataAccessLayer上有一个FindAll方法,如下所示:publicFindResultFindAll()whereT:Entity,new()和一个具有Type[]数组的客户端代码,它需要使用它来迭代调用FindAll方法,如下所示:foreach(vartypeintypeArray){varresult=DataAccessLayer.FindAll();...但是编译器提示“需要类型或命名空间”。有没有简单的方法来解决这个问题?我试

C#泛型是盒装的?

我执行了以下代码:usingSystem;usingSystem.Collections.Generic;namespaceTestReleaseAndDebug{publicclassGClass{publicT1Name{get;set;}publicT2Age{get;set;}publicvoidDisplay(){Console.WriteLine("Name:"+Name);Console.WriteLine("Age:"+Age);}}classProgram{staticvoidMain(string[]args){GClassperson=newGClass();pe

c# - 获取对动态对象中方法的泛型调用

我开始在.Net中使用动态对象,但我不知道该怎么做。我有一个继承自DynamicObject的类,我重写了TryInvokeMember方法。例如classMyCustomDynamicClass:DynamicObject{publicoverrideboolTryInvokeMember(InvokeMemberBinderbinder,object[]args,outobjectresult){//Iwanttoknowherethetypeofthegenericargument}}在该方法中,我想知道调用中通用参数的类型(如果有的话)。例如如果我调用以下代码,我想在我的动态对

c# - 具有泛型参数和抽象类的泛型

我有两个通用基类。第二个泛型类对第一个类的参数有约束。abstractclassFirstClass{...}abstractclassSecondClasswhereU:FirstClass{...}这不起作用,因为未定义FirstClass。所以我需要这样做。abstractclassFirstClass{...}abstractclassSecondClasswhereU:FirstClass{...}哪个有效。然而,这使得实现这些抽象类变得很丑陋。classSomeClass{...}classMyFirstClass:FirstClass{...}classMySecondC

C# 泛型接口(interface)特化

我想知道是否有可能以某种方式在C#中专门化通用接口(interface)方法?我发现了类似的问题,但没有完全像这样的问题。现在我怀疑答案是“不,你不能”,但我想确认一下。我有类似下面的内容。publicinterfaceIStorage{voidStore(Tdata);}publicclassStorage:IStorage{publicvoidStore(Tdata){Console.WriteLine("Generic");}publicvoidStore(intdata){Console.WriteLine("Specific");}}classProgram{staticvo

c# - 重载泛型方法

当调用用于存储对象的通用方法时,有时需要以不同方式处理特定类型。我知道您不能基于约束进行重载,但任何其他替代方案似乎都会出现其自身的问题。publicboolSave(Tentity)whereT:class{...somestoragelogic...}我想做的是类似下面的事情:publicboolSave(Tentity){...speciallogic...}过去,我们的团队创建了“一次性”方法来保存这些类,如下所示:publicboolSaveSpecificClass(SpecificClasssc){...speciallogic...}但是,如果您不知道该功能的存在,并且

c# - 如何为具有类型参数约束的泛型类型编写扩展方法?

我正在使用一个任务特定的.NET平台,它是预编译的,而不是开源的。对于某些任务,我需要扩展此类,而不是继承它。我只是想添加一个方法。首先我想向您展示一个dummycode现有类:publicclassMatrixwhereT:new(){...publicTvalues[,];...}我想通过以下方式扩展这个类:publicstaticclassMatrixExtension{publicstaticTgetCalcResult(thisMatrixmat){Tresult=0;...returnresult;}}我从许多谷歌链接中得到了这个语法,所以不知道它是否正确。编译器告诉我没有

c# - 泛型,其中 T 是实现接口(interface)的类

我有一个界面:interfaceIProfile{...}...和一个类:[Serializable]classProfile:IProfile{privateProfile(){...}//privatetoensureonlyxmlserializercreatesinstances}...和一个有方法的经理:classProfileManager{publicTLoad(stringprofileName)whereT:class,IProfile{using(varstream=new.......){varser=newXmlSerializer(typeof(T));ret